home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / lang / sofa.lha / sofa / install next >
Text File  |  2000-04-07  |  23KB  |  782 lines

  1. ; $VER: install 1.6 (7.4.2000)
  2. ;
  3. ; An Amiga Installer script for Sofa.
  4. ;
  5. ; Written by Thomas Aglassinger <agi@sbox.tu-graz.ac.at>
  6. ; Placed  in the public domain.
  7. ;
  8. ; NOTE: Start Installer from CLI with "APPNAME debug" to skip the stuff
  9. ;       that copies the files and modifies the s:User-Startup.
  10.  
  11. ;----------------------------------------------------------------------------
  12. ; Specify minimum installer version
  13. ;----------------------------------------------------------------------------
  14. (debug "set version")
  15. (set #minimum-installer-version 43)
  16. (set #minimum-installer-revision 3)
  17. (set #minimum-installer-id
  18.     (+ #minimum-installer-revision
  19.          (* #minimum-installer-version 65536)
  20.     )
  21. )
  22. (debug "  minimum-installer-id = " #minimum-installer-id)
  23. (debug "  current-installer-id = " @installer-version)
  24.  
  25. (set #minimum-os-version 39)
  26. (set #minimum-disk-space 20) ; in MB
  27. (set #minimum-memory-left 4) ; in MB
  28. (set #recommended-memory-left 8) ; in MB
  29.  
  30. ;----------------------------------------------------------------------------
  31. ; Setup messages, prompts and help text
  32. ;----------------------------------------------------------------------------
  33. (set #message-wrong-installer
  34. (cat "You have an old version of the program `Installer' on your Amiga.\n\n"
  35.       "The installation procedure needs at least Installer "
  36.       #minimum-installer-version "." #minimum-installer-revision ".\n\n"
  37.       "Obtain a newer version and try again.\n\n"
  38.       "(Check Aminet or the WWW site of the current owner of the rights for "
  39.       "Amiga - whoever that might be right now.)"
  40. ))
  41.  
  42. (set #message-wrong-os-version
  43. (cat "You need at least AmigaOS version " #minimum-os-version " for Sofa." )
  44. )
  45.  
  46. (set #message-welcome
  47. (cat "Welcome to the Amiga Installer to install the Sofa distribution "
  48.      "of the SmallEiffel compiler on your Amiga."
  49. ))
  50.  
  51. (set #message-welcome-setup
  52. (cat "Welcome to the Amiga Installer to setup an existing Sofa installation."
  53. ))
  54.  
  55. (set #message-exit
  56. (cat "\nSuccessfully installed Sofa.\n\n"
  57.       "Please reboot before using it."
  58. ))
  59.  
  60. (set #message-exit-change-compiler
  61. (cat "\nChanged the C compiler for Sofa.\n\n"
  62.       "The next time you invoke the \"compile\" command, %s will be used."
  63. ))
  64.  
  65. (set #prompt-ask-sofa-directory
  66. (cat "Select where to install Sofa.\n"
  67.       "A directory named \"sofa\" is created automatically"
  68. ))
  69.  
  70. (set #prompt-ask-c-compiler
  71. (cat "Select C compiler to be used by Sofa"
  72. ))
  73.  
  74. (set #help-ask-c-compiler
  75. (cat "Sofa does not compile to Amiga native code directly rather than "
  76.       "translates Eiffel source to C source. To actually create an "
  77.       "executable, you need a C compiler.\n\n"
  78.       "Naturally, the compiler selected has to be installed and within "
  79.       "the Workbench search path.\n\n"
  80.      "Refer to the manual for more details and where you can get "
  81.      "freely distributable C compilers."
  82. ))
  83.  
  84. (set #prompt-update-user-startup
  85. (cat "The following lines are added to the s:User-Startup:\n\n"
  86. ))
  87.  
  88. (set #help-update-user-startup
  89. (cat "These lines are necessary for Sofa to find its classes.\n\n"
  90.       "You can however skip this part and perform it manually later on "
  91.       "according to the documentation."
  92. ))
  93.  
  94. (set #prompt-copy-support-files "Copy additional documentation")
  95. (set #help-copy-support-files
  96. (cat "These files are not needed to run Sofa. Still they contain documentation "
  97.       "you might find useful."
  98. ))
  99.  
  100. (set #working-user-startup "Updating user-startup")
  101. (set #working-set-smalleiffel "Updating SmallEiffel settings")
  102. (set #working-compile-sofa-lib "Recompiling sofa.lib")
  103.  
  104. ; Setup messages
  105. (set #prompt-setup "Select item to setup or change")
  106. (set #help-setup
  107. (cat "" ; TODO: better help
  108.       @askchoice-help
  109. ))
  110.  
  111.  
  112. ; Various error messages and warnings
  113. (set #warning-wrong-cpu
  114. (cat "Warning: You need at least a 68020 CPU to use the included executables.\n\n"
  115.      "You can continue with the installation, but the SmallEiffel compiler "
  116.      "won't work if you try to start it.\n\n"
  117.     "If you really want 68000 executables, contact Sofa Support or bootstrap "
  118.     "the compiler yourself using the \"sofa:SmallEiffel/install\" tool. Refer "
  119.     "to \"Sofa:SmallEiffel/\" for more information."
  120. ))
  121.  
  122.  
  123. (set #warning-low-disk-space
  124. (cat "Warning: The volume you are about to install Sofa should have about "
  125.      #minimum-disk-space " MB left.\n\n"
  126.      "If you continue, installation will probably fail, or you will experience "
  127.      "problems pretty soon when using Sofa.\n\n"
  128.      "It is recommended that you free some space or choose a different volume."
  129. ))
  130.  
  131. (set #warning-low-memory
  132. (cat "Warning: To use the SmallEiffel compiler, "
  133.      "you need at least " #minimum-memory-left " MB of free memory ("
  134.      #recommended-memory-left " MB recommended)\n\n"
  135. ))
  136.  
  137. (set #message-manual-compiler-setup
  138. (cat "As you did not specify a certain compiler, you have to perform some "
  139.       "steps manually.\n\n"
  140.       "In particular, the files \"compiler.Amiga\" and \"linker.Amiga\" "
  141.       "have to be set. Refer to \"man/system.txt\" in the SmallEiffel "
  142.       "directory for more information."
  143. ))
  144.  
  145. (set #message-binaries-missing
  146. (cat "Note that the compiler binaries are available in a different "
  147.       "archive depending on your CPU. You can obtain them from Aminet, "
  148.       "look out for a file dev/lang/sofa*.lha with \"*\" "
  149.       "indicating your CPU.\n\n"
  150.       "Then simply copy the included binaries to \"%s\"."
  151. ))
  152.  
  153. (set #message-install-se-failed
  154. (cat "Cannot setup SmallEiffel.\n\nAn error log has been stored in \"%s\"."
  155.       "Please submit this file to Sofa support."
  156. ))
  157.  
  158. (set #message-compile-sofa-lib-failed
  159. (cat "Warning: Cannot compile sofa.lib.\n\n"
  160.       "Probably your C compiler is not supported or not installed correctly. "
  161.      "Retry to compile sofa.lib again with \"sofa:setup\" with the log file "
  162.      "enabled. If it still doesn't work, submit the log to Sofa Support."
  163. ))
  164.  
  165. (set #message-not-implemented "This feature has not been implemented yet.")
  166.  
  167. (set #message-amiga-includes-missing
  168. (cat "Warning: The AmigaOS includes don't seem to be installed on your system.\n"
  169.       "(The file \"%s\" must exist.)\n\n"
  170.       "You will not be able to use certain low-level class of SmallEiffel, or any "
  171.       "part of the sofa library.\n\n"
  172.       "It is recommended to abort installation now, install the AmigaOS includes, "
  173.       "and install Sofa only after that."
  174. ))
  175.  
  176. (set #message-c-compiler-missing
  177. (cat "Warning: None of the supported C compilers seems to be installed on your system\n\n"
  178.       "You probably will not be able to do anything with Sofa.\n\n"
  179.       "It is recommended to abort installation now, install a C compiler "
  180.       "and install Sofa only after that."
  181. ))
  182.  
  183. (set #message-c-support-sucks
  184. (cat "Warning: The support for the C compiler you selected somewhat sucks.\n\n"
  185.       "Consider aborting the installation and retrying with a different choice."
  186. ))
  187.  
  188. ;----------------------------------------------------------------------------
  189. ; Some global constants and defaults
  190. ;----------------------------------------------------------------------------
  191. (set #env-appendix "sys/system.se")
  192.  
  193. (set #compiler-sas-name   "SAS/c")
  194. (set #compiler-sas-se     "sc")
  195. (set #compiler-sas-id     0)
  196. (set #compiler-dice-name  "Dice")
  197. (set #compiler-dice-se    "dice")
  198. (set #compiler-dice-id    1)
  199. (set #compiler-vbcc-name  "Vbcc")
  200. (set #compiler-vbcc-se    "vbcc")
  201. (set #compiler-vbcc-id    2)
  202. (set #compiler-gcc-name   "gcc/egcs")
  203. (set #compiler-gcc-se     "gcc")
  204. (set #compiler-gcc-id     3)
  205. (set #compiler-other-name "Other")
  206. (set #compiler-other-se   "")
  207. (set #compiler-other-id   4)
  208.  
  209. (set #setup-compiler-name  "Change C compiler used by SmallEiffel")
  210. (set #setup-compiler-id    0)
  211. (set #setup-sofa-lib-name  "Recompile sofa.lib")
  212. (set #setup-sofa-lib-id    1)
  213. (set #setup-cpu-name       "Recompile SmallEiffel") ; TODO: support this
  214. (set #setup-cpu-id         2)
  215.  
  216. (set #includes "sofa:SmallEiffel/sys sofa:library/sofa/include")
  217. (set #libs "sofa:lib")
  218.  
  219. (set #install-se-log "t:sofa_install_se.log")
  220. (set #compile-sofa-lib-log "t:sofa_compile_sofa_lib.log")
  221. (set #execute-log "t:sofa_execute.log")
  222. (set #execute-temp "t:sofa_execute.tmp")
  223.  
  224. ;----------------------------------------------------------------------------
  225. ; Check requirements
  226. ;----------------------------------------------------------------------------
  227.  
  228. ; Check installer version to piss people off and make them
  229. ; download a new one or forget about the whole thing - He he he.
  230. ; (The script should work with older versions, but how am I
  231. ; supposed to test this?)
  232. ;
  233. ; Check OS version and memory left.
  234.  
  235. (procedure P-check-requirements
  236. (
  237.     (debug "check installer version")
  238.     (if (< @installer-version #minimum-installer-id)
  239.       (
  240.          (debug "installer too old")
  241.          (abort #message-wrong-installer)
  242.       )
  243.     )
  244.  
  245.    (if (< (/ (getversion) 65536) #minimum-os-version)
  246.      (
  247.        (debug "OS too old")
  248.        (abort #message-wrong-os-version)
  249.      )
  250.    )
  251.  
  252. ))
  253.  
  254.  
  255. (procedure P-check-disk-space
  256. (
  257.    (debug "check disk space")
  258.  
  259.    (if (< (/ (getdiskspace #sofa-directory) 1048576) #minimum-disk-space)
  260.       (
  261.          (debug "low diskspace")
  262.          (message #warning-low-disk-space (all))
  263.       )
  264.    )
  265.  
  266.    (if (< (/ (database "total-mem") 1048576) #minimum-memory-left)
  267.       (
  268.          (debug "low memory")
  269.          (message #warning-low-memory (all))
  270.       )
  271.    )
  272.  
  273.    (set #cpu (database "cpu"))
  274.    (debug "cpu =" #cpu)
  275.    (if (or (= "68000" #cpu) (= "68010" #cpu))
  276.       (
  277.          (debug "wrong CPU")
  278.          (message #warning-wrong-cpu  (all))
  279.       )
  280.    )
  281. ))
  282.  
  283. ;----------------------------------------------------------------------------
  284. ; Welcome user
  285. ;----------------------------------------------------------------------------
  286. (procedure P-welcome
  287. (
  288.     (debug "welcome")
  289.     (welcome #message-welcome)
  290. ))
  291.  
  292. (procedure P-welcome-setup
  293. (
  294.     (debug "welcome")
  295.     (welcome #message-welcome-setup)
  296. ))
  297.  
  298. ;----------------------------------------------------------------------------
  299. ; Ask for target directory where to install Sofa
  300. ;----------------------------------------------------------------------------
  301. (procedure P-ask-sofa-directory
  302. (
  303.     (debug "ask-sofa-directory")
  304.  
  305.     (if (exists "sofa:" (noreq))
  306.         (
  307.             ; Update existing installation. Use parent of "Sofa:" as default
  308.             (set #default-sofa-directory "sofa:/")
  309.         )
  310.         (
  311.             ; New installation. Use parent of current directory as default
  312.             (set #default-sofa-directory "/")
  313.         )
  314.     )
  315.  
  316.     (set #default-sofa-directory (expandpath #default-sofa-directory))
  317.  
  318.     (set #sofa-directory
  319.     (askdir
  320.         (prompt #prompt-ask-sofa-directory)
  321.         (default #default-sofa-directory)
  322.         (help @askdir-help)
  323.     ))
  324.  
  325.     ; Compute name of Sofa directory
  326.     (set #sofa-directory (tackon #sofa-directory "sofa"))
  327.     (debug "  #sofa-directory =" #sofa-directory)
  328.  
  329.     ; Compute name of library directory
  330.     (set #library-directory (tackon #sofa-directory "library"))
  331.     (debug "  #library-directory =" #library-directory)
  332.  
  333.     ; Compute name of SmallEiffel's "bin" and "sys" directory
  334.     (set #smalleiffel-directory (tackon #sofa-directory "SmallEiffel"))
  335.     (set #smalleiffel-directory-bin (tackon #smalleiffel-directory "bin"))
  336.     (set #smalleiffel-directory-sys (tackon #smalleiffel-directory "sys"))
  337.     (debug "  #smalleiffel-directory =" #smalleiffel-directory)
  338.  
  339.     ; Set target directory used in standard message during (exit)
  340.     (set @default-dest #sofa-directory)
  341.     (debug " @default-dest =" @default-dest)
  342.  
  343. ))
  344.  
  345. ;----------------------------------------------------------------------------
  346. ; Ask for C compiler to use
  347. ;----------------------------------------------------------------------------
  348. (procedure P-ask-c-compiler
  349. (
  350.     (debug "ask-c-compiler")
  351.  
  352.     ; Figure out default selection of compiler:
  353.     ; if sc: exists use SAS/c
  354.     ; if dcc: exists, use DICE
  355.     ; if vbcc: exists, use vbcc
  356.     ; if ADE: or GG: exists, use egcs/GCC
  357.     (set #compiler-choice #compiler-other-id)
  358.     (set #compiler-se #compiler-others-se)
  359.     (if (exists("sc:" (noreq)))
  360.         (
  361.             (set #compiler-choice #compiler-sas-id)
  362.         )
  363.         (if (exists("dcc:" (noreq)))
  364.             (
  365.                 (set #compiler-choice #compiler-dice-id)
  366.             )
  367.             (if (exists("vbcc:" (noreq)))
  368.                 (
  369.                     (set #compiler-choice #compiler-vbcc-id)
  370.                 )
  371.                 (if (OR (<> "" (exists("ade:" (noreq))) (<> "" (exists("gg:" (noreq))))))
  372.                     (
  373.                          (set #compiler-choice #compiler-gcc-id)
  374.                     )
  375.                 )
  376.             )
  377.         )
  378.     )
  379.  
  380.     (debug "  default compiler: " #compiler-choice)
  381.  
  382.     (if (= #compiler-choice #compiler-other-id)
  383.         (
  384.             (message #message-c-compiler-missing )
  385.         )
  386.     )
  387.  
  388.     (set #compiler-choice
  389.     (askchoice
  390.         (prompt #prompt-ask-c-compiler)
  391.         (help #help-ask-c-compiler)
  392.         (default #compiler-choice)
  393.         (choices
  394.             #compiler-sas-name
  395.             #compiler-dice-name
  396.             #compiler-vbcc-name
  397.             #compiler-gcc-name
  398.             #compiler-other-name
  399.         )
  400.     ))
  401.  
  402.     ; compiler name as known by SE's install
  403.     (set #compiler-se #compiler-other-se)
  404.     (set #compiler-name #compiler-other-name)
  405.     (if (= #compiler-choice #compiler-sas-id)
  406.         (
  407.             (set #compiler-se #compiler-sas-se)
  408.             (set #compiler-name #compiler-sas-name)
  409.             (P-check-includes-exist "include:")
  410.         )
  411.         (if (= #compiler-choice #compiler-dice-id)
  412.             (
  413.                 (set #compiler-se #compiler-dice-se)
  414.                 (set #compiler-name #compiler-dice-name)
  415.                 (P-check-includes-exist "dinclude:")
  416.             )
  417.             (if (= #compiler-choice #compiler-vbcc-id)
  418.                 (
  419.                     (set #compiler-se #compiler-vbcc-se)
  420.                     (set #compiler-name #compiler-vbcc-name)
  421.                     (P-check-includes-exist "vincludem68k:")
  422.                 )
  423.                 (if (= #compiler-choice #compiler-gcc-id)
  424.                     (
  425.                         (set #compiler-se #compiler-gcc-se)
  426.                         (set #compiler-name #compiler-gcc-name)
  427.                     )
  428.                 )
  429.             )
  430.         )
  431.     )
  432.  
  433.     (set #use-other-compiler (= #compiler-other-se #compiler-se))
  434.  
  435.  
  436.     (debug "  choice = " #compiler-choice "(" #use-other-compiler ")")
  437.  
  438.     (if (= #compiler-choice #compiler-gcc-id)
  439.         (
  440.             (message #message-c-support-sucks)
  441.         )
  442.     )
  443. ))
  444.  
  445. (procedure P-check-includes-exist #assign
  446. (
  447.     (set #include-name (tackon #assign "exec/types.h"))
  448.     (if (not (exists #include-name (noreq)))
  449.         (
  450.             (message (#message-amiga-includes-missing #include-name))
  451.         )
  452.     )
  453. ))
  454.  
  455. ;----------------------------------------------------------------------------
  456. ; Update User-Startup
  457. ;----------------------------------------------------------------------------
  458. (procedure P-update-user-startup
  459. (
  460.     ; Simply adds a SetEnv and Path command
  461.     (debug "update user-startup")
  462.  
  463.     (working #working-user-startup)
  464.  
  465.     (set #command-user-startup
  466.     (cat ("Assign sofa: \"%s\"\n" #sofa-directory)
  467.           ("SetEnv SmallEiffel \"%s\"\n" (tackon "sofa:SmallEiffel" #env-appendix ))
  468.           ("SetEnv GOBO \"%s\"\n" "sofa:library/gobo")
  469.           ("SetEnv EXML \"%s\"\n" "sofa:library/exml")
  470.           "Path Add \"sofa:SmallEiffel/bin\" \"sofa:tool\" \"${GOBO}/bin\"\n"
  471.     ))
  472.  
  473.     (P-add-assign-command "sc:" "include:" "lib:")
  474.     (P-add-assign-command "dcc:" "dinclude:" "dlib:")
  475.     (P-add-assign-command "vbcc:" "vincludem68k:" "vlibm68k:")
  476.     ; TODO: consider gcc
  477.  
  478.     (debug "---")
  479.     (debug #command-user-startup)
  480.     (debug "---")
  481.  
  482.     ; execute startup already, so that "sofa:" exists
  483.     (textfile
  484.         (dest #execute-temp)
  485.         (append #command-user-startup)
  486.       (safe)
  487.     )
  488.     (if (= 0 (execute #execute-temp (safe)))
  489.         (
  490.             (delete #execute-temp)
  491.         )
  492.         (
  493.             (abort ("Error while executing \"%s\" (code %s)\n\nPlease submit the file \"%s\" to Sofa Support" #execute-temp @ioerr #execute-log))
  494.         )
  495.     )
  496.  
  497.     (if (<> "debug" @app-name)
  498.         (startup "sofa"
  499.             (confirm)
  500.             (prompt  (cat #prompt-update-user-startup #command-user-startup))
  501.             (help    #help-update-user-startup)
  502.             (command #command-user-startup)
  503.         )
  504.         (debug "  debug-skip")
  505.     )
  506. ))
  507.  
  508. (procedure P-add-assign-command #assign-check #include #lib
  509. (
  510.     (set #command-user-startup
  511.     (cat #command-user-startup
  512.           ("Assign Exists \"%s\"\n" #assign-check)
  513.           "if not warn\n"
  514.           ("   Assign Add \"%s\" %s\n" #include #includes)
  515.           ("   Assign Add \"%s\" %s\n" #lib #libs)
  516.           "endif\n"
  517.     ))
  518. ))
  519.  
  520. ;----------------------------------------------------------------------------
  521. ; Ask setup main choices
  522. ;----------------------------------------------------------------------------
  523. (procedure P-ask-setup-choice
  524. (
  525.     (debug "ask-setup-choice")
  526.     (set #setup-choice
  527.          (askchoice
  528.               (prompt "Select item to setup or change")
  529.               (help @askchoice-help)
  530.               (choices
  531.                   #setup-compiler-name
  532.                   #setup-sofa-lib-name
  533.               )
  534.               (default 0)
  535.          )
  536.     )
  537. ))
  538.  
  539. ;----------------------------------------------------------------------------
  540. ; Setup SmallEiffel
  541. ;----------------------------------------------------------------------------
  542. (procedure P-setup-smalleiffel
  543. (
  544.     (debug "P-setup-smalleiffel")
  545.  
  546.     (if (<> #compiler-se #compiler-other-se)
  547.         (
  548.             (working #working-set-smalleiffel)
  549.             (set #command-install
  550.                   ("\"%s\" >\"%s\" -no_compile -compiler %s"
  551.                       (tackon #smalleiffel-directory "install")
  552.                       #install-se-log
  553.                       #compiler-se
  554.                   )
  555.             )
  556.  
  557.             (debug "---")
  558.             (debug #command-install)
  559.             (debug "---")
  560.  
  561.             (set #run-result (run #command-install))
  562.             (if (= 0 #run-result)
  563.                 (
  564.                     ; extracted successfully
  565.                     (delete #install-se-log)
  566.                 )
  567.                 (
  568.                     ; error installation
  569.                     (abort (#message-install-se-failed  #install-se-log))
  570.                 )
  571.             )
  572.         )
  573.         (
  574.             (debug "   no compiler specified")
  575.         )
  576.     )
  577. ))
  578.  
  579. ;----------------------------------------------------------------------------
  580. ; Compile sofa.lib
  581. ;----------------------------------------------------------------------------
  582. (procedure P-compile-sofa-lib
  583. (
  584.     (debug "P-compile-sofa-lib")
  585.  
  586.     (if (<> #compiler-se #compiler-other-se)
  587.         (
  588.             (working #working-compile-sofa-lib)
  589.  
  590.             (set #rexx-command "sofa:library/sofa/source/rebuild.rexx")
  591.  
  592.             (debug "---")
  593.             (debug #rexx-command)
  594.             (debug "---")
  595.  
  596.             (set #run-result (rexx #rexx-command))
  597.  
  598.             (if (= 0 #run-result)
  599.                 (
  600.                     ; extracted successfully
  601.                     (delete #compile-sofa-lib-log)
  602.                 )
  603.                 (
  604.                     ; error
  605.                     (message #message-compile-sofa-lib-failed)
  606.                 )
  607.             )
  608.         )
  609.         (
  610.             (debug "   no compiler specified")
  611.         )
  612.     )
  613. ))
  614.  
  615. ;----------------------------------------------------------------------------
  616. ; Create directories
  617. ;----------------------------------------------------------------------------
  618. (procedure P-create-directories
  619. (
  620.     ; Create Sofa directory and SmallEiffel/bin because they are needed in any case
  621.     (makedir #sofa-directory            (safe))
  622.     (copyfiles
  623.          (source "/sofa.info")
  624.          (dest (tackon #sofa-directory "/"))
  625.     )
  626.  
  627.     (makedir #library-directory         (safe))
  628.     (makedir #smalleiffel-directory     (safe))
  629.     (makedir #smalleiffel-directory-bin (safe))
  630.     (makedir #smalleiffel-directory-sys)
  631. ))
  632.  
  633. ;----------------------------------------------------------------------------
  634. ; Check if current directory is target directory
  635. ;----------------------------------------------------------------------------
  636. (procedure P-check-already-in-sofa
  637. (
  638.     (debug "P-check-already-in-sofa")
  639.  
  640.     ; Check, if target directory is current directory. If so, no files have
  641.     ; to be copied later on
  642.     (set #expanded-current (expandpath ""))
  643.     (set #expanded-sofa    (expandpath #sofa-directory))
  644.     (debug "  expanded-current = " #expanded-current)
  645.     (debug "  expanded-sofa    = " #expanded-sofa)
  646.  
  647.     (set #already-in-sofa (= #expanded-current #expanded-sofa))
  648.  
  649.     (debug "  already-in-sofa = " #already-in-sofa)
  650. ))
  651.  
  652. ;----------------------------------------------------------------------------
  653. ; Create setup script from install script
  654. ;----------------------------------------------------------------------------
  655. (procedure P-create-setup
  656. (
  657.     (debug "create-setup")
  658.  
  659.     (set #setup-script (tackon #sofa-directory "setup"))
  660.     (set #setup-script-info (cat #setup-script ".info"))
  661.     (set #install-script (tackon #sofa-directory "install"))
  662.     (set #install-script-info (cat #install-script ".info"))
  663.     (rename #install-script #setup-script)
  664.     (rename #install-script-info #setup-script-info)
  665.     (tooltype
  666.         (dest #setup-script)
  667.         (settooltype "APPNAME" "setup")
  668.     )
  669. ))
  670.  
  671. ;----------------------------------------------------------------------------
  672. ; Exit
  673. ;----------------------------------------------------------------------------
  674. (procedure P-exit
  675. (
  676.     (debug "exit")
  677.  
  678.     ; If no specific compiler was specified, give the user a hint
  679.     (complete 98)
  680.     (if #use-other-compiler (message #message-manual-compiler-setup))
  681.  
  682.     ; If no binaries have been found, tell the user where he can get them from
  683.     ; (complete 99)
  684.     ; (if (= 0 (exists(tackon #target-directory-bin "compile")))
  685.     ;    (message (#message-binaries-missing #target-directory-bin) (all))
  686.     ; )
  687.  
  688.     ; Say "good bye"
  689.     (complete 100)
  690.     (exit #message-exit)
  691. ))
  692.  
  693. (procedure P-exit-change-compiler
  694. (
  695.     (debug "exit")
  696.  
  697.     ; Just say "good bye"
  698.     ; (message (#message-exit-change-compiler #compiler-name) (all))
  699.     ; (exit (quiet))
  700.     (exit (#message-exit-change-compiler #compiler-name) (quiet))
  701. ))
  702.  
  703. ;----------------------------------------------------------------------------
  704. ; Do it!
  705. ;----------------------------------------------------------------------------
  706.  
  707. (complete 0) (P-check-requirements)
  708.  
  709. (debug "@app-name = " @app-name)
  710. (if (<> @app-name "setup")
  711.     (
  712.         ; Install the package
  713.         (complete  0) (P-welcome)
  714.  
  715.         (complete 10) (P-ask-sofa-directory)
  716.                     (P-check-disk-space)
  717.         (complete 20) (P-ask-c-compiler)
  718.  
  719.         (complete 30) (P-check-already-in-sofa)
  720.  
  721.         (if (not #already-in-sofa)
  722.             (
  723.                 (complete 33) (P-create-directories)
  724.  
  725.                 (if (<> @app-name "debug")
  726.                     (
  727.                         (complete 35) (copyfiles (pattern "#?") (files) (infos) (source "") (dest #sofa-directory))
  728.  
  729.                         (complete 37) (copyfiles (all) (source "developer")   (dest (tackon #sofa-directory "developer")))
  730.                         (complete 40) (makedir "lib" (safe)) ; just in case
  731.                                           (copyfiles (all) (source "lib")         (dest (tackon #sofa-directory "lib")))
  732.                         (complete 45) (copyfiles (all) (source "manual")      (dest (tackon #sofa-directory "manual")))
  733.                         (complete 48) (copyfiles (all) (source "tool")        (dest (tackon #sofa-directory "tool")))
  734.  
  735.                         (complete 50) (copyfiles (all) (source "SmallEiffel") (dest (tackon #sofa-directory "SmallEiffel")))
  736.                         (complete 70) (copyfiles (all) (source "library")     (dest (tackon #sofa-directory "library")))
  737.                     )
  738.                 )
  739.             )
  740.         )
  741.         (complete 85) (P-update-user-startup)
  742.         (complete 87) (P-setup-smalleiffel)
  743.         (complete 90) (P-compile-sofa-lib)
  744.         (complete 99) (P-create-setup)
  745.  
  746.        (set @app-name "Sofa")
  747.       (set @default-dest #sofa-directory)
  748.         (P-exit)
  749.     )
  750.     (
  751.         ; setup
  752.         (set #sofa-directory (expandpath ""))
  753.         (set @default-dest #sofa-directory)
  754.  
  755.         (complete 10) (P-welcome-setup)
  756.         (complete 20) (P-ask-setup-choice)
  757.         (select #setup-choice
  758.             (
  759.                 ; Change C compiler
  760.                 (set #smalleiffel-directory (expandpath "SmallEiffel"))
  761.                 (set #smalleiffel-directory-bin (tackon #smalleiffel-directory "bin"))
  762.                 (set #smalleiffel-directory-sys (tackon #smalleiffel-directory "sys"))
  763.                 (complete  30) (P-ask-c-compiler)
  764.                 (complete  40) (P-setup-smalleiffel )
  765.                 (complete  60) (P-compile-sofa-lib)
  766.                 (complete 100) (P-exit-change-compiler)
  767.             )
  768.             (
  769.                 (complete 50) (P-compile-sofa-lib)
  770.             )
  771.             (
  772.             (abort #message-not-implemented)
  773.             )
  774.             (
  775.             (abort #message-not-implemented)
  776.             )
  777.         )
  778.         (set @app-name "Sofa")
  779.     )
  780. )
  781.  
  782.